from aiohttp import web

class ClassBasedView(web.View):
    '''
    请求的处理与响应，必须继承自 aiohttp.web.View
    '''
    async def get(self):
        '''
        通过 self.request 来获取从客户端发出的请求的相关信息，比如参数
        request参考：https://docs.aiohttp.org/en/stable/web_reference.html#aiohttp.web.Request
        '''
        url_path = self.request.path_qs
        return web.json_response({'url': url_path})

    async def post(self):

        return await post_resp(self.request)


async def FuncBasedView(request):
    '''
    参考：https://docs.aiohttp.org/en/stable/web.html#module-aiohttp.web
    web.HTTPFound 重定向
    web.json_response(dict) json 字符串
    web.Response(text) 文本
    web.FileResponse(file_path) 文件
    '''
    return web.FileResponse('./admin/index.html')


class ObjectBasedView(object):
    '''
    样例 Handler 类，实例化之后才能用作请求的处理与响应
    '''
    def __init__(self, name):
        self.name = name

    async def get1(self, request):
        '''
        request 中含有来自客户端发出的请求的相关信息，比如参数
        '''
        # 从路由 '/demo/get/{name}' 中匹配 'name' 位置上的字符串
        name = request.match_info.get('name', "Anonymous")
        return web.Response(text="Hello, %s, I'm %s" % (name, self.name))

    async def post1(self, request):
        txt = "Hello, %s, I'm %s".format(name, self.name)
        return web.Response(text=txt)